﻿/*
SINACOR - BMF&Bovespa
Arquivo: FaixaQuantidadeEspecificar.cs
Criado em: 14-mai-2010 17:57:07
Arquiteto Responsável: p-dmartinelli
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Common.Validation;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Validation.BusinessRules;
using Sinacor.Servico.Bovespa.Alocacao.BusinessEntity;


namespace Sinacor.Servico.Bovespa.Alocacao.BusinessLogic.BusinessRuleValidation 
{
	public class FaixaQuantidadeEspecificar : BaseBusinessRuleValidation<NegocioAlocadoDireto>, IBusinessRuleValidation 
	{
		#region Atributos
		private int _erroObjetoNulo = 314816;
		private int _quantDifLoteMinimo = 520009;
		private int _quantMaiorQueDisponivel = 520008;
		#endregion
		#region Propriedades
		public int ErroObjetoNulo
		{
			get { return _erroObjetoNulo; }
			set { _erroObjetoNulo = value; }
		}

		public int QuantDifLoteMinimo
		{
			get { return _quantDifLoteMinimo; }
			set { _quantDifLoteMinimo = value; }
		}

		public int QuantMaiorQueDisponivel
		{
			get { return _quantMaiorQueDisponivel; }
			set { _quantMaiorQueDisponivel = value; }
		}
		#endregion
		#region Métodos
		public List<ValidationError> GetErrors()
		{
            return base.ErrorsList;
		}

		public void Validate()
		{
            if (base.EntityToValidate != null)
            {
                if (!(EntityToValidate.DadosAlocacao.QuantidadeEspecificar <= (EntityToValidate.Negocio.Quantidade - EntityToValidate.Negocio.QuantidadeCasada)))
                {
                    base.AddValidationError(QuantMaiorQueDisponivel);
                    return;
                }

                Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Parameter.ConsultarLoteMinimoNegociacao loteMinimoNegociacao = new Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Parameter.ConsultarLoteMinimoNegociacao();
                loteMinimoNegociacao._Titulo = EntityToValidate.Negocio.Codigo;
                loteMinimoNegociacao._DataPregao = EntityToValidate.Negocio.DataPregao;
                Sinacor.Servico.Bovespa.Titulo.BusinessLogic.Titulo bl = new Sinacor.Servico.Bovespa.Titulo.BusinessLogic.Titulo();
                int loteMinimo = bl.ConsultarLoteMinimoNegociacao(loteMinimoNegociacao);
                if (! (EntityToValidate.DadosAlocacao.QuantidadeEspecificar % loteMinimo == 0))
                {
                    base.AddValidationError(QuantDifLoteMinimo);
                    return;
                }
            }
            else
                base.AddValidationError(ErroObjetoNulo);
		}
		#endregion
	}

}